package generic04;
/*
* JDK 5泛型的优点:
*  1.使用泛型可以将运行时期出现的问题(例如:类型转换异常)提前到编译时期
*   (提前报错)
*  2.一定程度上避免去强制类型转换,可以直接使用集合中元素类型对应的方法
*
* */
import java.util.ArrayList;
import java.util.Collection;

public class Demo02 {
    public static void main(String[] args) {
        //method01();
        //method02();
        Collection<String> c = new ArrayList<>();//当指定泛型为String时,类中的所有泛型都为String
        c.add("abc");
        c.add("def");
        for (String s : c) {//只用泛型后,增强for上的元素类型也被确定,可以直接使用其对应的方法
            System.out.println(s.charAt(0));
        }
    }

    private static void method02() {
        Collection<String> c = new ArrayList<>();//当指定泛型为String时,类中的所有泛型都为String
        c.add("abc");
        c.add("def");
        //c.add(123);编译就会直接报错
    }

    private static void method01() {
        //不指定泛型时,集合中可以存入各种数据类型,在对集合中的元素进行类型转换时容易造成类型转换异常
        Collection c = new ArrayList();
        c.add("acb");
        c.add(123);//ClassCastException
        c.add("def");

        for (Object o : c) {
            String s = (String) o;//使用String类中的方法需要向下转型
            System.out.println(s);
        }
    }
}
